/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.tom_roush.fontbox.cff;

/**
 * This is specialized CFFEncoding. It's used if the EncodingId of a font is set to 1.
 *
 * @author Villu Ruusmann
 */
public final class CFFExpertEncoding extends CFFEncoding
{

    private static final int CHAR_CODE = 0;
    private static final int CHAR_SID = 1;

    /**
     * Table of character codes and their corresponding sid.
     */
    private static final int[][] CFF_EXPERT_ENCODING_TABLE = {
        {0, 0},
        {1, 0},
        {2, 0},
        {3, 0},
        {4, 0},
        {5, 0},
        {6, 0},
        {7, 0},
        {8, 0},
        {9, 0},
        {10, 0},
        {11, 0},
        {12, 0},
        {13, 0},
        {14, 0},
        {15, 0},
        {16, 0},
        {17, 0},
        {18, 0},
        {19, 0},
        {20, 0},
        {21, 0},
        {22, 0},
        {23, 0},
        {24, 0},
        {25, 0},
        {26, 0},
        {27, 0},
        {28, 0},
        {29, 0},
        {30, 0},
        {31, 0},
        {32, 1},
        {33, 229},
        {34, 230},
        {35, 0},
        {36, 231},
        {37, 232},
        {38, 233},
        {39, 234},
        {40, 235},
        {41, 236},
        {42, 237},
        {43, 238},
        {44, 13},
        {45, 14},
        {46, 15},
        {47, 99},
        {48, 239},
        {49, 240},
        {50, 241},
        {51, 242},
        {52, 243},
        {53, 244},
        {54, 245},
        {55, 246},
        {56, 247},
        {57, 248},
        {58, 27},
        {59, 28},
        {60, 249},
        {61, 250},
        {62, 251},
        {63, 252},
        {64, 0},
        {65, 253},
        {66, 254},
        {67, 255},
        {68, 256},
        {69, 257},
        {70, 0},
        {71, 0},
        {72, 0},
        {73, 258},
        {74, 0},
        {75, 0},
        {76, 259},
        {77, 260},
        {78, 261},
        {79, 262},
        {80, 0},
        {81, 0},
        {82, 263},
        {83, 264},
        {84, 265},
        {85, 0},
        {86, 266},
        {87, 109},
        {88, 110},
        {89, 267},
        {90, 268},
        {91, 269},
        {92, 0},
        {93, 270},
        {94, 271},
        {95, 272},
        {96, 273},
        {97, 274},
        {98, 275},
        {99, 276},
        {100, 277},
        {101, 278},
        {102, 279},
        {103, 280},
        {104, 281},
        {105, 282},
        {106, 283},
        {107, 284},
        {108, 285},
        {109, 286},
        {110, 287},
        {111, 288},
        {112, 289},
        {113, 290},
        {114, 291},
        {115, 292},
        {116, 293},
        {117, 294},
        {118, 295},
        {119, 296},
        {120, 297},
        {121, 298},
        {122, 299},
        {123, 300},
        {124, 301},
        {125, 302},
        {126, 303},
        {127, 0},
        {128, 0},
        {129, 0},
        {130, 0},
        {131, 0},
        {132, 0},
        {133, 0},
        {134, 0},
        {135, 0},
        {136, 0},
        {137, 0},
        {138, 0},
        {139, 0},
        {140, 0},
        {141, 0},
        {142, 0},
        {143, 0},
        {144, 0},
        {145, 0},
        {146, 0},
        {147, 0},
        {148, 0},
        {149, 0},
        {150, 0},
        {151, 0},
        {152, 0},
        {153, 0},
        {154, 0},
        {155, 0},
        {156, 0},
        {157, 0},
        {158, 0},
        {159, 0},
        {160, 0},
        {161, 304},
        {162, 305},
        {163, 306},
        {164, 0},
        {165, 0},
        {166, 307},
        {167, 308},
        {168, 309},
        {169, 310},
        {170, 311},
        {171, 0},
        {172, 312},
        {173, 0},
        {174, 0},
        {175, 313},
        {176, 0},
        {177, 0},
        {178, 314},
        {179, 315},
        {180, 0},
        {181, 0},
        {182, 316},
        {183, 317},
        {184, 318},
        {185, 0},
        {186, 0},
        {187, 0},
        {188, 158},
        {189, 155},
        {190, 163},
        {191, 319},
        {192, 320},
        {193, 321},
        {194, 322},
        {195, 323},
        {196, 324},
        {197, 325},
        {198, 0},
        {199, 0},
        {200, 326},
        {201, 150},
        {202, 164},
        {203, 169},
        {204, 327},
        {205, 328},
        {206, 329},
        {207, 330},
        {208, 331},
        {209, 332},
        {210, 333},
        {211, 334},
        {212, 335},
        {213, 336},
        {214, 337},
        {215, 338},
        {216, 339},
        {217, 340},
        {218, 341},
        {219, 342},
        {220, 343},
        {221, 344},
        {222, 345},
        {223, 346},
        {224, 347},
        {225, 348},
        {226, 349},
        {227, 350},
        {228, 351},
        {229, 352},
        {230, 353},
        {231, 354},
        {232, 355},
        {233, 356},
        {234, 357},
        {235, 358},
        {236, 359},
        {237, 360},
        {238, 361},
        {239, 362},
        {240, 363},
        {241, 364},
        {242, 365},
        {243, 366},
        {244, 367},
        {245, 368},
        {246, 369},
        {247, 370},
        {248, 371},
        {249, 372},
        {250, 373},
        {251, 374},
        {252, 375},
        {253, 376},
        {254, 377},
        {255, 378}
    };

    private CFFExpertEncoding()
    {
    }

    /**
     * Returns an instance of the CFFExportEncoding class.
     * @return an instance of CFFExportEncoding
     */
    public static CFFExpertEncoding getInstance()
    {
        return CFFExpertEncoding.INSTANCE;
    }

    private static final CFFExpertEncoding INSTANCE = new CFFExpertEncoding();

    static
    {
        for (int[] encodingEntry : CFF_EXPERT_ENCODING_TABLE)
        {
            INSTANCE.add(encodingEntry[CHAR_CODE], encodingEntry[CHAR_SID]);
        }
    }
}